package com.yefcion.survey.util;

import org.apache.commons.lang3.ArrayUtils;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 如何检查一个数组 (无序) 是否包含一个特定的值
 *
 * [Java 高效的判断数组中是否包含某个元素](https://www.yuque.com/shimoind/hm4ydh/36b54116-546f-46bf-8736-17d488e2baf9)
 */
public class ArrayJudge {

    /**
     * 数组转列表之后判断
     */
    public static boolean useList(String[] arr, String targetValue) {
        return Arrays.asList(arr).contains(targetValue);
    }

    /**
     * 数组转 set 之后判断
     */
    public static boolean useSet(String[] arr, String targetValue) {
        Set<String> set = new HashSet<>(Arrays.asList(arr));
        return set.contains(targetValue);
    }

    /**
     * 循环判断
     */
    public static boolean useLoop(String[] arr, String targetValue) {
        for (String s : arr) {
            if (s.equals(targetValue)) {
                return true;
            }
        }
        return false;
    }

    /**
     * Arrays.binarySearch()
     * 方法只能用于有序数组！！！如果数组无序的话得到的结果就会很奇怪。
     */
    public static boolean useArraysBinarySearch(String[] arr, String targetValue) {
        int a = Arrays.binarySearch(arr, targetValue);
        return a > 0;
    }

    /**
     * 使用 ArrayUtils
     */
    public static boolean useArrayUtils(String[] arr, String targetValue) {
        return ArrayUtils.contains(arr, targetValue);
    }

}
